package com.sicau.service.impl;

import com.sicau.dao.ComposerMapper;
import com.sicau.dao.UpdateTimeMapper;
import com.sicau.entity.dto.Composer;
import com.sicau.entity.dto.Notice;
import com.sicau.entity.dto.UpdateTime;
import com.sicau.entity.pojo.vo.ResultVO;
import com.sicau.service.ComposerService;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class ComposerServiceImp implements ComposerService {

    @Autowired
    ComposerMapper composerMapper;
    @Autowired
    UpdateTimeMapper updateTimeMapper;


    /**
     *方法;登录验证
     * @param composer
     * @return ResultVO
     */
    @Override
    public ResultVO login(Composer composer) {

        try{
            Composer queryComposer = composerMapper.queryLogin(composer);
            ResultVO resultVO = null;


            if(queryComposer != null){//根据查询到的账号status字段内容来判断账户的状态并返回对应信息，约定：0（账号关闭）、1（账户开启）、2（新注册）
                if (queryComposer.getStatus().equals("1")){
                    resultVO = new ResultVO(0,"success");
                }else if(queryComposer.getStatus().equals("0")){
                    resultVO = new ResultVO(1,"失败，账户关闭");
                }else if(queryComposer.getStatus().equals("2")){
                    resultVO = new ResultVO(2,"失败，第一次登录需要修改密码",new Composer(queryComposer.getId(),queryComposer.getPassword()));
                }else{
                    resultVO = new ResultVO(-2,"未知异常");
                }
            }else{
                resultVO = new ResultVO(-1,"账号或密码错误");
            }

            return resultVO;

        }catch (Exception e){
            return new ResultVO(-2,e.toString());
        }

    }


    /**
     *方法;获取主页信息
     * @param composer
     * @return ResultVO
     */
    @Override
    public ResultVO getIndexInfo(Composer composer) {
        try{
            //查询创作者信息（根据composer对象查询与之相关的所有信息，包括：创作者信息、创作者个人信息、创作者所有的任务信息）
            Composer queryComposer = composerMapper.queryAll(composer);
            ResultVO resultVO = new ResultVO();//创建的对象会根据条件判断不同，被赋予不同的值，在方法最后return
            JSONArray jsonArray = new JSONArray();

            if(queryComposer != null){//将查询到的多个对象添加到Json数组并放入resultVo对象中
                if (queryComposer.getStatus().equals("1")){

                    //将创作者信息转换为json对象后添加到json数组中
                    JSONObject composerJson = new JSONObject();
                    composerJson.put("composer",queryComposer);
                    jsonArray.add(composerJson);

                    //查询通知信息并转换为json对象后添加到json数组中
                    JSONObject noticesJson = new JSONObject();
                    noticesJson.put("notices",composerMapper.queryNotice());
                    jsonArray.add(noticesJson);

                    //查询最近一次更新的时间信息并转换为json对象后添加到json数组中
                    JSONObject updateTimeJson = new JSONObject();
                    updateTimeJson.put("updateTime",updateTimeMapper.selectUpdateTime(queryComposer.getId()));
                    jsonArray.add(updateTimeJson);

                    //添加以上查询到的数据到resultVo对象中
                    resultVO.setStatus(0);
                    resultVO.setMsg("success");
                    resultVO.setData(jsonArray);
                    System.out.println(resultVO);

                }else if(queryComposer.getStatus().equals("0")){

                    resultVO.setStatus(-1);
                    resultVO.setMsg("失败，账户关闭，请联系管理员");
                    resultVO.setData(jsonArray);

                }else if(queryComposer.getStatus().equals("2")){
                    resultVO.setStatus(-1);
                    resultVO.setMsg("失败，第一次登陆需要修改密码");
                    resultVO.setData(new Composer(queryComposer.getId(),queryComposer.getPassword()));
                }else{
                    resultVO.setStatus(-1);
                    resultVO.setMsg("未知异常");
                }
            }else{
                resultVO.setStatus(-1);
                resultVO.setMsg("无该用户信息");
            }

            return resultVO;

        }catch (Exception e){
            e.printStackTrace();
            return new ResultVO(-1,e.toString());

        }

    }


    /**
     * 方法;修改用户密码
     * @param composer
     * @param newPassword
     * @return
     */
    @Override
    public ResultVO updatePassword(Composer composer, String newPassword) {

        try {
            if(null == newPassword){//当未接收到新密码时，返回错误信息（不允许将密码设置为空）
                return new ResultVO(-1,"密码修改失败");
            }

            if(null == composerMapper.queryLogin(composer)){//若未查询到对应用户则返回错误信息
                return new ResultVO(-1,"密码修改失败");
            }

            //调用dao修改密码
            composerMapper.updatePassword(composer,newPassword);
            return new ResultVO(0,"密码修改成功");
        }catch (Exception e){
            return new ResultVO(-1,"密码修改失败");
        }
    }


    /**
     * 方法：根据位置获取公告信息
     * @param id
     * @param location
     * @return
     */
    @Override
    public ResultVO getNotice(String id,String location) {
        try{

            //查询用户、通知信息并将其转换为json对象后添加到json数组中
            JSONArray jsonArray = new JSONArray();
            List<Notice> notices = composerMapper.queryNoticeByLocation(location);
            Composer composer = composerMapper.queryUser(id);

            JSONObject noticesJson = new JSONObject();
            noticesJson.put("notice",notices);


            JSONObject composerJson = new JSONObject();
            composerJson.put("composer",composer);

            jsonArray.add(noticesJson);
            jsonArray.add(composerJson);

            return new ResultVO(0,"success",jsonArray);
        }catch (Exception e){
            return new ResultVO(-1,e.toString());
        }
    }


    /**
     * 方法：获取个人信息
     * @param composerId
     * @return
     */
    @Override
    public ResultVO getPersonalInfo(String composerId) {

        try {
            JSONArray jsonArray = new JSONArray();
            Composer composer = new Composer();
            ResultVO resultVO = new ResultVO();//创建的对象会根据条件判断不同，被赋予不同的值，在方法最后return
            composer.setId(composerId);
            Composer queryComposer = composerMapper.queryAll(composer);//获取个人信息调用queryAll即可，它可以查询到以用户表为主表的所有信息，前端根据需要使用

            if(queryComposer != null){//将查询到的多个对象添加到Json数组并放入resultVo对象中
                if (queryComposer.getStatus().equals("1")){

                    //将创作者信息转换为json对象后添加到json数组中
                    JSONObject composerJson = new JSONObject();
                    composerJson.put("composer",queryComposer);
                    jsonArray.add(composerJson);

                    //查询通知信息并转换为json对象后添加到json数组中
                    JSONObject noticesJson = new JSONObject();
                    noticesJson.put("notices",composerMapper.queryNotice());
                    jsonArray.add(noticesJson);


                    //添加以上查询到的数据到resultVo对象中
                    resultVO.setStatus(0);
                    resultVO.setMsg("success");
                    resultVO.setData(jsonArray);
                    System.out.println(resultVO);

                }else if(queryComposer.getStatus().equals("0")){

                    resultVO.setStatus(-1);
                    resultVO.setMsg("失败，账户关闭，请联系管理员");
                    resultVO.setData(jsonArray);

                }else if(queryComposer.getStatus().equals("2")){
                    resultVO.setStatus(-1);
                    resultVO.setMsg("失败，第一次登陆需要修改密码");
                    resultVO.setData(new Composer(queryComposer.getId(),queryComposer.getPassword()));
                }else{
                    resultVO.setStatus(-1);
                    resultVO.setMsg("未知异常");
                }
            }else{
                resultVO.setStatus(-1);
                resultVO.setMsg("无该用户信息");
            }

            return resultVO;

        }catch (Exception e){
            return new ResultVO(-1,e.toString());
        }

    }
}
